#!/bin/bash

dataBaseFile="$MAEDIR/sucu.mae"
daemonName="DetectarT"
saveParkScript="GrabarParqueT.sh"

acceptedDir="$GRUPO/inst_recibidas"
inputDir="$ARRIDIR"
rejectedDir="$RECHDIR"

log="./LoguearT.sh DetectarT"

moveComm="./MoverT.sh"

isDaemonRunning=false
timeToSleep=20

# --------------------- INICIO DECLARACION FUNCIONES -------------------- #

# Función que permite saber si el <branch_id> y <región_id> del archivo está en "archSucuMae"
function IsOnDataBase()
{
	# Obtengo la fecha de hoy (Formato YYYYMMDD) para poder verificar que la sucursal este vigente en la actualidad
	fechaHoy=`date +%Y%m%d 2> /dev/null`

	awk -v regionId="$1" -v branchId="$2" -v fHoy="$fechaHoy" 'BEGIN { FS = "," };
	{ 
		# Verifico que la región y la sucursal existan en el maestro
		if((regionId == $1) && (branchId == $3)) 
		{
			# Convierto las fechas de inicio y fin a un formato comparable
			startDate=substr($7,7,4) substr($7,4,2) substr($7,1,2);
			endDate=substr($8,7,4) substr($8,4,2) substr($8,1,2);
			# Verifico que la fecha de inicio sea anterior a hoy y si hay fecha de fin, que sea posterior a hoy
			if (((fHoy >= startDate) && (endDate == "")) || ((fHoy >= startDate) && (fHoy <= endDate)))
			{
				exit 1  # Combinación válida
			}
			else
			{
				exit 0  # Combinación inválida
			}
		}
	}' "$dataBaseFile"
	return $?
}

# Recibe el path completo a un archivo y lo procesa
function processFile()
{
	fileName="${1##*/}"
	$log I "Procesando archivo >> $fileName"

	# Expresión regular que verifica si esta bien formado el nombre del archivo
	# <sucursal_id>-<branch_id> >> numero(s)-numero(s)
	aux=`echo $fileName | grep "^[0-9]*-[0-9]*$"`

	# Si esta bien formado el nombre del archivo se analiza validez
	if [ -n "$aux" ]
	then
		# Se obtiene los campos <region_id> y <branch_id> del nombre del archivo
		regionId=${fileName%%-*}
		branchId=${fileName#*-}

		# Se verifica la existencia de regionId y branchId en el archivo maestro de sucursales
		IsOnDataBase $regionId $branchId

		# Evaluación del resultado de comprobacion de existencia
		if [ $? -eq 1 ]
		then # Si ambos campos relevados son validos se acepta
			$log I "El archivo >> $fileName >> ha sido ACEPTADO!"
				# Se mueve el archivo al directorio "instalaciones recibidas"		
			$moveComm "$1" "$acceptedDir" "$daemonName"

		else # Si no son validos se rechaza
			$log I "El archivo >> $fileName >> ha sido RECHAZADO! >> La dupla Región-Sucursal es inválida."
			# Se mueve el archivo al directorio de "instalaciones rechazadas"
			$moveComm "$1" "$rejectedDir" "$daemonName"
		fi
	else # Si no esta bien formado el nombre de archivo se rechaza
		$log I  "El archivo >> $fileName >> ha sido RECHAZADO! >> Nombre de archivo mal formado."
		# Se mueve el archivo al directorio de "instalaciones rechazadas"
		$moveComm "$1" "$rejectedDir" "$daemonName"
	fi
	return 0
}

# --------------------- /DECLARACION FUNCIONES -------------------- #

# --------------------- LOOP DEMONIO -------------------- #
function DaemonLoop()
{
	while $isDaemonRunning
	do
		if [ -d "$inputDir" ]
		then
			$log I "-------------------------- COMIENZO CICLO DEMONIO --------------------------"
			filesProcessed=0
			IFSaux=$IFS
			IFS=$'\n'
			# Proceso los archivos que se encuentren en $inputDir
			for i in `find "$inputDir" -type f 2>/dev/null`
			do
				IFS=$IFSaux
				processFile "$i"
				(( filesProcessed++ ));
				IFS=$'\n'
			done
			IFS=$IFSaux

			if [ $filesProcessed -gt 0 ]
			then
				$log I "Se han procesado $filesProcessed archivos del directorio [ $inputDir ]."
			fi

			#######----------- verifico que no haya otra instancia de GrabarParqueT-----########
			INSTANCIAS=`ps -e | grep -c $saveParkScript` # me devuelve la cantidad de procesos en ejecucion que contenga GrabarParqueT

			if [ ${INSTANCIAS} -ge 1 ]   #si es mayor que 2, porque contabilizo la actual
			then
				$log A 'Hay otra instancia de $saveParkScript en transcurso. Proceso $saveParkScript salteado.'
			elif [ `find "$acceptedDir" -type f | wc -l` -ge 1 ]
			then
				./$saveParkScript &
			fi
			$log I "-------------------------- FIN DE CICLO DEMONIO --------------------------"
			sleep "$timeToSleep"
		else
			isDaemonRunning=false
			echo "El directorio que debe supervisar el demonio no existe. Demonio detenido."
			$log I "El directorio que debe supervisar el demonio no existe. Demonio detenido."
			$log E 9
		fi
	done
	return 0
}
# --------------------- /LOOP DEMONIO -------------------- #

# --------------------- MAIN -------------------- #

if [ "$#" -eq 1 -a "$1" == "StartD" ]
then
	isDaemonRunning=true
	DaemonLoop
fi
exit 0
# --------------------- /MAIN -------------------- #

